home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / amiga / gui / prcgntn1.lha / Precognition / source / precognition3d.c < prev    next >
C/C++ Source or Header  |  1992-12-23  |  5KB  |  167 lines

  1. #include "precognition3d.h"
  2. #include "precognition_utils.h"
  3. #include <proto/exec.h>
  4. #include <proto/intuition.h>
  5. #include <proto/graphics.h>
  6. #include "amigamem.h"
  7.  
  8. pcg_3DPens Std_v20_pens = { 1, 0, 2, 1 };
  9. pcg_3DPens Std_v13_pens = { 1, 0, 1, 2 };
  10.  
  11. pcg_3DPens StandardPens( void )
  12. {
  13.    return (is_Workbench_v2()) ? Std_v20_pens : Std_v13_pens;
  14. }
  15.  
  16. void pcg_Init3DBox(  pcg_3DBox *Box,
  17.                      SHORT      LeftEdge,
  18.                      SHORT      TopEdge,
  19.                      USHORT     Width,
  20.                      USHORT     Height,
  21.                      UBYTE      TopLeftPen,
  22.                      UBYTE      BottomRightPen,
  23.                      Border    *NextBorder )
  24. {
  25.    SHORT Wm1, Wm2, Hm1, Hm2;
  26.  
  27.    Box->TopLeft.LeftEdge   = LeftEdge;
  28.    Box->TopLeft.TopEdge    = TopEdge;
  29.    Box->TopLeft.FrontPen   = TopLeftPen;
  30.    Box->TopLeft.DrawMode   = JAM1;
  31.    Box->TopLeft.NextBorder = &Box->BottomRight;
  32.  
  33.    Box->BottomRight.LeftEdge   = LeftEdge;
  34.    Box->BottomRight.TopEdge    = TopEdge;
  35.    Box->BottomRight.FrontPen   = BottomRightPen;
  36.    Box->BottomRight.DrawMode   = JAM1;
  37.    Box->BottomRight.NextBorder = NextBorder;
  38.  
  39.    Wm1 = Width-1;
  40.    Wm2 = Width-2;
  41.    Hm1 = Height-1;
  42.    Hm2 = Height-2;
  43.  
  44.    Box->Points[ 0] = Wm1;
  45.    Box->Points[ 1] = 0;
  46.    Box->Points[ 2] = 0;
  47.    Box->Points[ 3] = 0;
  48.    Box->Points[ 4] = 0;
  49.    Box->Points[ 5] = Hm1;
  50.    Box->Points[ 6] = 1;
  51.    Box->Points[ 7] = Hm2;
  52.    Box->Points[ 8] = 1;
  53.    Box->Points[ 9] = 1;
  54.  
  55.    Box->Points[10] = 1;
  56.    Box->Points[11] = Hm1;
  57.    Box->Points[12] = Wm1;
  58.    Box->Points[13] = Hm1;
  59.    Box->Points[14] = Wm1;
  60.    Box->Points[15] = 0;
  61.    Box->Points[16] = Wm2;
  62.    Box->Points[17] = 1;
  63.    Box->Points[18] = Wm2;
  64.    Box->Points[19] = Hm2;
  65.  
  66.    Box->TopLeft.Count     = 5;
  67.    Box->TopLeft.XY        = (SHORT *) &Box->Points[0];
  68.    Box->BottomRight.Count = 5;
  69.    Box->BottomRight.XY    = (SHORT *) &Box->Points[10];
  70. }
  71.  
  72. void pcg_Init3DBevel(   pcg_3DBevel *Bevel,
  73.                         SHORT        LeftEdge,
  74.                         SHORT        TopEdge,
  75.                         USHORT       Width,
  76.                         USHORT       Height,
  77.                         USHORT       BevelWidth,
  78.                         UBYTE        TopLeftPen,
  79.                         UBYTE        BottomRightPen,
  80.                         Border      *NextBorder )
  81. {
  82.    pcg_Init3DBox(  &Bevel->Outer,
  83.                     LeftEdge,    TopEdge,
  84.                     Width,       Height,
  85.                     TopLeftPen,  BottomRightPen,
  86.                    &Bevel->Inner.TopLeft );
  87.  
  88.    pcg_Init3DBox(  &Bevel->Inner,
  89.                     LeftEdge+2,           TopEdge+1,
  90.                     Width-4-BevelWidth,   Height-2-BevelWidth,
  91.                     BottomRightPen,       TopLeftPen,
  92.                     NextBorder );
  93. }
  94.  
  95. typedef struct pcg_DoubleBorder
  96. {
  97.    Border b1, b2;
  98. } pcg_DoubleBorder;
  99.  
  100. void pcg_Init3DThinBox( pcg_DoubleBorder *db,
  101.                         SHORT        LeftEdge,
  102.                         SHORT        TopEdge,
  103.                         USHORT       Width,
  104.                         USHORT       Height,
  105.                         SHORT       *Points,
  106.                         UBYTE        TopLeftPen,
  107.                         UBYTE        BottomRightPen,
  108.                         Border      *NextBorder )
  109. {
  110.    SHORT Wm1, Hm1;
  111.  
  112.    db->b1.LeftEdge   = db->b2.LeftEdge = LeftEdge;
  113.    db->b1.TopEdge    = db->b2.TopEdge  = TopEdge;
  114.    db->b1.DrawMode   = db->b2.DrawMode = JAM1;
  115.    db->b1.FrontPen   = TopLeftPen;
  116.    db->b2.FrontPen   = BottomRightPen;
  117.    db->b1.NextBorder = &db->b2;
  118.    db->b2.NextBorder = NextBorder;
  119.    db->b1.XY         = &Points[0];
  120.    db->b1.Count      = 3;
  121.    db->b2.XY         = &Points[4];
  122.    db->b2.Count      = 3;
  123.  
  124.    Wm1 = Width-1;
  125.    Hm1 = Height-1;
  126.  
  127.    Points[ 0] = Wm1;
  128.    Points[ 1] = 0;
  129.    Points[ 2] = 0;
  130.    Points[ 3] = 0;
  131.    Points[ 4] = 0;
  132.    Points[ 5] = Hm1;
  133.    Points[ 6] = Wm1;
  134.    Points[ 7] = Hm1;
  135.    Points[ 8] = Wm1;
  136.    Points[ 9] = 0;
  137.  
  138. }
  139.  
  140.  
  141. void pcg_Init3DThinBevel(  pcg_3DThinBevel *Bevel,
  142.                            SHORT        LeftEdge,
  143.                            SHORT        TopEdge,
  144.                            USHORT       Width,
  145.                            USHORT       Height,
  146.                            USHORT       BevelWidth,
  147.                            UBYTE        TopLeftPen,
  148.                            UBYTE        BottomRightPen,
  149.                            Border      *NextBorder )
  150. {
  151.    pcg_Init3DThinBox(  (pcg_DoubleBorder*) &Bevel->b[0],
  152.                        LeftEdge, TopEdge,
  153.                        Width, Height,
  154.                       &Bevel->Points[0],
  155.                        TopLeftPen,   BottomRightPen,
  156.                       &Bevel->b[2] );
  157.  
  158.    pcg_Init3DThinBox(  (pcg_DoubleBorder*) &Bevel->b[2],
  159.                        LeftEdge+1, TopEdge+1,
  160.                        Width-2-BevelWidth,    Height-2-BevelWidth,
  161.                       &Bevel->Points[10],
  162.                        BottomRightPen, TopLeftPen,
  163.                        NextBorder );
  164.  
  165. }
  166.  
  167.